package main;

/**
 * 表示猜拳游戏中的 “手势” 的类
 */
public class Hand {

    public final static int HAND_VALUE_GUU = 0;  //表示石头的值
    public final static int HAND_VALUE_CHO = 1;  //表示剪刀的值
    public final static int HAND_VALUE_PAA = 2;  //表示布的值
    public final static Hand[] hand = {          //表示猜拳中3种手势的实例
            new Hand(HAND_VALUE_GUU),
            new Hand(HAND_VALUE_CHO),
            new Hand(HAND_VALUE_PAA)
    };
    private final static String[] name = {"石头","剪刀","布"};   //表示猜拳中手势所对应的字符串

    private int handValue;  //猜拳中出的手势的值

    private Hand(int handValue) {
        this.handValue = handValue;
    }

    public static Hand getHand(int handValue){  //根据手势的值获取其对应的实例
        return hand[handValue];
    }

    public boolean isStrongerThan(Hand h){  //如果 this 胜了 h 则返回 true
        return fight(h) == 1;
    }

    public boolean isWeakerThan(Hand h){    //如果 this 输给了 h 则返回 true
        return fight(h) == -1;
    }

    private int fight(Hand h){  //计分:平 0，胜 1，负 -1
        if (this == h){
            return 0;
        }else if ((this.handValue + 1) % 3 == h.handValue){
            return 1;
        }else {
            return -1;
        }
    }

    @Override
    public String toString() {  // 转换为手势值所对应的字符串
        return name[handValue];
    }
}














